home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / games / ippon / source.lzh / maketbl.c < prev    next >
C/C++ Source or Header  |  2000-07-07  |  2KB  |  106 lines

  1. /* maketbl.c */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5.  
  6. #define SPEED_MAX    32
  7. double speed[SPEED_MAX] =
  8. {0.50, 0.60, 0.70, 0.80, 0.90,
  9.  1.00, 1.10, 1.20, 1.30, 1.40, 1.50, 1.60, 1.70, 1.80, 1.90,
  10.  2.00, 2.10, 2.20, 2.30, 2.40, 2.50, 2.60, 2.70, 2.80, 2.90,
  11.  3.00, 3.10, 3.20,
  12.  4.00, 5.00, 6.00, 7.00};
  13.  
  14.  
  15. typedef struct {
  16.     signed int x, y;
  17. } VECTOR;
  18.  
  19. unsigned char pstable[256][256];
  20. VECTOR xytable[SPEED_MAX][256];
  21. unsigned char rndtable[256];
  22.  
  23.  
  24. void usage (void)
  25. {
  26.     printf (
  27.                "IPPON.X 用テーブルを作成する maketbl.x ver1.00\n"
  28.                "        programmed by Mitsuky <FreeSoftware>\n"
  29.                "以下のテーブルを作成します\n"
  30.                "    TBL/PSTABLE.DAT     : 自機サーチテーブル\n"
  31.                "    TBL/RNDTABLE.DAT : 乱数テーブル\n"
  32.                "    TBL/XYTABLE.DAT     : sin,cos テーブル\n"
  33.            "角度関係のは全て1周=256段階で、右向きが0、下向きが64となっております\n"
  34.         );
  35. }
  36.  
  37.  
  38.  
  39. int maketable (void)
  40. {
  41.     int i, j;
  42.     FILE *fp;
  43.  
  44.     printf ("データテーブルを作成します。\n");
  45.  
  46.     printf ("少々時間が掛かります。申し訳ありません。\n"
  47.         "( arctan を 256x256 個計算しています。)\n");
  48.     for (i = 0; i < 256; i++) {
  49.         printf ("%3d/256\x1b[0J\n\x0b", i + 1);
  50.         for (j = 0; j < 256; j++) {
  51.             pstable[i][j] = (unsigned char) (atan ((double) j / (double) i) * 256.0 / 2.0 / M_PI);
  52.         }
  53.     }
  54.     fp = fopen ("TBL/PSTABLE.DAT", "wb");
  55.     if (fp == NULL) {
  56.         printf ("TBL/PSTABLE.DAT が書き込めません\n");
  57.         exit (-1);
  58.     }
  59.     fwrite (pstable, 256 * 256, sizeof (unsigned char), fp);
  60.     fclose (fp);
  61.  
  62.  
  63.     for (i = 0; i < 256; i++)
  64.         rndtable[i] = (unsigned char) ((rand () / 4) & 255);
  65.     fp = fopen ("TBL/RNDTABLE.DAT", "wb");
  66.     if (fp == NULL) {
  67.         printf ("TBL/RNDTABLE.DAT が書き込めません\n");
  68.         exit (-1);
  69.     }
  70.     fwrite (rndtable, 256, sizeof (unsigned char), fp);
  71.     fclose (fp);
  72.  
  73.  
  74.     for (i = 0; i < SPEED_MAX; i++) {
  75.         for (j = 0; j < 256; j++) {
  76.             xytable[i][j].x = (signed int) (cos (2.0 * M_PI * (long) j / 256.0) * 65536.0 * speed[i]);
  77.             xytable[i][j].y = (signed int) (sin (2.0 * M_PI * (long) j / 256.0) * 65536.0 * speed[i]);
  78.         }
  79.     }
  80.     fp = fopen ("TBL/XYTABLE.DAT", "wb");
  81.     if (fp == NULL) {
  82.         printf ("TBL/XYTABLE.DAT が書き込めません\n");
  83.         exit (-1);
  84.     }
  85.     fwrite (xytable, 256 * SPEED_MAX, sizeof (VECTOR), fp);
  86.     fclose (fp);
  87.  
  88.  
  89.     printf ("\n終了しました。\n");
  90.  
  91.     return (0);
  92. }
  93.  
  94.  
  95.  
  96. int main (int argc, char *argv[])
  97. {
  98.     if (argc != 1) {
  99.         usage ();
  100.         return (-1);
  101.     }
  102.     maketable ();
  103.  
  104.     return (0);
  105. }
  106.